#include <stdio.h>
#include <stdint.h>
#include <string.h>
void printBits(char * str , unsigned int n)
{
    printf("%s\n", str);
    unsigned int mask = 1 << (sizeof(unsigned int) * 8 - 1);
    for(int i = 0; i < sizeof(unsigned int) * 8; i++)
    {
        if(n & mask)
        {
            putchar('1');
        }
        else
        {
            putchar('0');
        }
        mask >>= 1;
        if(((i + 1) % 4) == 0)
        {
            putchar(' ');
        }
    }
    putchar('\n');
}
int main()
{
    int GPIO_MODE = 0xaacc00ff;
    printBits("GPIO_MODE", GPIO_MODE);
    int M  = ~3;
    printBits("M", M);
    GPIO_MODE &= M;
    printBits("GPIO_MODE & M", GPIO_MODE);
    M = 0x01;
    GPIO_MODE |=M;
    printBits("GPIO_MODE | M", GPIO_MODE);

    M = 0b1111;
    GPIO_MODE ^= M; // XOR
    printBits("GPIO_MODE ^ M", GPIO_MODE);
    return 0;

}